/**
 * Excel文件操作工具
 * 
 * @author Jason
 * @since 2024/05/13
 */
import { ElMessage } from 'element-plus';

/**
 * 处理Excel文件下载
 * 
 * @param response Axios响应对象
 * @param fileName 保存的文件名，如不提供则从响应头中获取
 */
export function handleExcelDownload(response: any, fileName?: string) {
  if (!response || !response.data) {
    ElMessage.error('下载失败，响应数据异常');
    return;
  }
  
  try {
    // 从响应中获取文件类型
    const contentType = response.headers['content-type'] || 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
    
    // 获取文件名
    let downloadFileName = fileName;
    if (!downloadFileName) {
      // 尝试从响应头中获取文件名
      const contentDisposition = response.headers['content-disposition'];
      if (contentDisposition) {
        const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
        const matches = filenameRegex.exec(contentDisposition);
        if (matches != null && matches[1]) {
          downloadFileName = matches[1].replace(/['"]/g, '');
        }
      }
      
      // 如果无法获取文件名，使用默认名称
      if (!downloadFileName) {
        downloadFileName = `excel_${new Date().getTime()}.xlsx`;
      }
    }
    
    // 创建Blob对象
    const blob = new Blob([response.data], { type: contentType });
    
    // 创建下载链接并触发下载
    const url = window.URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    link.download = downloadFileName;
    link.style.display = 'none';
    document.body.appendChild(link);
    link.click();
    
    // 清理
    window.URL.revokeObjectURL(url);
    document.body.removeChild(link);
    
    return true;
  } catch (error) {
    console.error('Excel下载处理出错:', error);
    ElMessage.error('文件下载失败，请稍后重试');
    return false;
  }
} 